package com.ssy.lingxi.member.merchant.service.web;

import com.ssy.lingxi.common.model.vo.PageVO;
import com.ssy.lingxi.common.response.PageData;
import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.member.merchant.model.vo.basic.response.RoleQueryVO;
import com.ssy.lingxi.member.merchant.model.vo.lrc.request.*;
import com.ssy.lingxi.member.merchant.model.vo.lrc.response.*;
import org.springframework.http.HttpHeaders;

import java.util.List;

/**
 * 平台后台、能力中心 - 会员等级配置服务接口
 * @author 万宁
 * @version 2.0.0
 * @date 2020-09-21
 */
public interface IMemberLevelConfigService {
    /**
     * 分页查询会员升级规则
     * @param headers HttpHeaders信息
     * @param pageVO 接口参数
     * @return 操作结果
     */
    Wrapper<PageData<MemberLevelRuleConfigQueryVO>> pageMemberLevelRuleConfig(HttpHeaders headers, PageVO pageVO);

    /**
     * 修改会员升级规则可获取的分值
     * @param headers HttpHeaders信息
     * @param ruleVO 接口参数
     * @return  操作结果
     */
    Wrapper<Void> updateMemberLevelRuleConfigScore(HttpHeaders headers, MemberLevelRuleConfigUpdateScoreVO ruleVO);

    /**
     * 分页查询会员等级配置
     * @param headers Http头部信息
     * @param pageVO  接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberLevelQueryVO>> pageMemberLevels(HttpHeaders headers, MemberLevelPageVO pageVO);

    /**
     * 分页查询会员等级配置
     * @param headers Http头部信息
     * @param pageVO  接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberLevelQueryVO>> pageMemberLevelByConsumer(HttpHeaders headers, MemberLevelPageVO pageVO);

    /**
     * 新增或修改会员等级时，查询等级类型列表
     * @param headers Http头部信息
     * @return 查询结果
     */
    Wrapper<List<MemberLevelTypeVO>> findMemberLevelTypes(HttpHeaders headers);

    /**
     * 新增或修改会员等级时，分页查询会员角色列表
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<RoleQueryVO>> pageRoles(HttpHeaders headers, PageVO pageVO);

    /**
     * 新增会员等级
     * @param headers Http头部信息
     * @param levelVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> createMemberLevel(HttpHeaders headers, MemberLevelVO levelVO);

    /**
     * 修改会员等级
     * @param headers Http头部信息
     * @param updateVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> updateMemberLevel(HttpHeaders headers, MemberLevelUpdateVO updateVO);

    /**
     * 查询会员等级详情
     * @param headers Http头部信息
     * @param idVO 接口参数
     * @return 查询结果
     */
    Wrapper<MemberLevelDetailVO> findMemberLevel(HttpHeaders headers, MemberLevelIdVO idVO);

    /**
     * 修改会员等级状态
     * @param headers Http头部信息
     * @param statusVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> updateMemberLevelStatus(HttpHeaders headers, MemberLevelStatusVO statusVO);

    /**
     * 删除会员等级
     * @param headers Http头部信息
     * @param idVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> deleteMemberLevel(HttpHeaders headers, MemberLevelIdVO idVO);

    /**
     * 权益与升级阈值 - 选择会员权益
     * @param headers Http头部信息
     * @return 查询结果
     */
    Wrapper<List<BaseMemberRightQueryVO>> findMemberLevelRights(HttpHeaders headers);

    /**
     * 权益与升级阈值 - 查询详情
     * @param headers Http头部信息
     * @param idVO 接口参数
     * @return 查询结果
     */
    Wrapper<MemberLevelRightDetailVO> findMemberLevelRightDetail(HttpHeaders headers, MemberLevelIdVO idVO);

    /**
     * 修改升级阈值、权益列表
     * @param headers Http头部信息
     * @param pointVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> updateMemberLevelRight(HttpHeaders headers, MemberLevelRightUpdateVO pointVO);

    /**
     * 修改权益参数
     * @param headers Http头部信息
     * @param paramVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> updateRightParameter(HttpHeaders headers, MemberRightParamVO paramVO);

    /**
     * 修改权益状态
     * @param headers Http头部新
     * @param statusVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> updateRightStatus(HttpHeaders headers, MemberRightStatusVO statusVO);

    /**
     * 将所有没有配置会员等级的下级会员，初始化为最小会员等级
     * @param headers Http头部信息
     * @return 操作结果
     */
    Wrapper<Void> rebuildMemberLevelRight(HttpHeaders headers);

    /**
     * 查询平台会员的等级、权益、信用积分
     * @param headers Http头部信息
     * @param levelVO 接口参数
     * @return 平台会员的等级、权益、信用积分
     */
    Wrapper<MemberLrcVO> getPlatformMemberLrc(HttpHeaders headers, MemberIdAndRoleIdVO levelVO);
}
